iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 9
0

前言

在介紹 Node 時有提到, Nodes 之間是依靠 Topics 以及 Message 來交換所需的 Data,三者之間的關係可以由下圖來解釋:
https://ithelp.ithome.com.tw/upload/images/20200923/20129807cW1lt9XZCV.png

以圖為例,首先是 Node1 先向 Topic1 傳遞 Message1,當 Topic1 這個主題接收到 Message1 時, Node2 也能接收到 Message1,因此我們給 Node1 稱為發布者 (Publisher), Node2 稱為訂閱者 (Subscriber)。以下我們再利用 ROS 最經典的小烏龜來進一步講解 Nodes 與 Topics 的關係,而 Message 的部分我們也會再往後做介紹。

Nodes & Topics

首先執行 roscore,然後在新 Terminal下執行 rosrun turtlesim trutlesim_node,這時你應該會看到畫面出現一個新的視窗長這樣:
https://ithelp.ithome.com.tw/upload/images/20200923/20129807ZKg2kmeoVv.png

再開一個新 Terminal,執行 rosrun turtlesim turtle_teleop_key,完成後只要在這個視窗下,便可以透過鍵盤的方向鍵來控制剛剛的那隻小烏龜:
https://ithelp.ithome.com.tw/upload/images/20200923/201298077jq8j1R3m0.png

準備就緒後,再次新增一個 Terminal 來檢查一下目前運行中的 Nodes 有哪些,輸入指令 rosnode list
https://ithelp.ithome.com.tw/upload/images/20200923/20129807mPujpVumqH.png

可以看到目前執行的 Nodes 有三個 [/rosout], [/teleop_turtle], [/turtlesim]
[/rosout] 這個 Node 基本上就是一個 log,負責記錄錯誤訊息;而 [/teleop_turtle][/turtlesim],便是我們剛剛所執行的 Nodes 囉。

接著,我們可以利用 rosnode info [/Node_name] 來看 Node 更詳細的資訊:
https://ithelp.ithome.com.tw/upload/images/20200923/20129807bcBxN94aZn.png

從這當中我們可以看到, Node 本身所發布 (Publish) 與訂閱 (Subscribe) 的 Topics。值得注意的是, Node 是可以同時發布或訂閱多個 Topics 的!

接著我們再透過 rostopic list 來看目前有哪些 Topics:
https://ithelp.ithome.com.tw/upload/images/20200923/20129807Waj366mAPF.png

或者我們也可以利用 rostopic list -v 指令,顯示 Topic 的名稱、格式以及有幾個 Nodes 發布或訂閱這個 Topics:
https://ithelp.ithome.com.tw/upload/images/20200923/20129807Wkz65AkW4P.png

與 Node 相似的是,我們也可以使用 rostopic info [topic_name] 來查看某個 Topic 的內容:
https://ithelp.ithome.com.tw/upload/images/20200923/20129807je7ZWh0V2L.png

以上我們透過相關指令查看 Topics 的詳細資訊,但如果今天 ROS 專案過於龐大,可能同時開啟更多的 Nodes 與 Topics 時,上面的方法就顯得有點麻煩,因此我們可以透過 ROS 系統裡的 rqt 工具來查看。輸入指令 rosrun rqt_graph rqt_graph
https://ithelp.ithome.com.tw/upload/images/20200923/201298077S7NXzlph5.png
此視窗稱為動態流程圖 (dynamic graph),可以看到目前運行的 Nodes 與 Topics 之間的關係。若將滑鼠移到 Topics 上則會顯示對應的顏色,藍色為 Publisher、綠色為 Subscriber、紅色則為 Topic。

結語

經過今天的教學後是不是又對 Topic 和 Node 有更進一步的了解了呢? 透過將 Topic 、 Node 和 Message 傳遞訊息的關係,用 Ros 系統中經典的小烏龜來進行展示, 希望能夠更容易幫助大家理解。使用 Node listTopic list 指令來查看當前運行的 Node、Topic 的操作十分重要,因為這對於之後製作自走車,獲取環境資訊時是一個很方便的功能。接著明天就會著重在 Message 的介紹,大家敬請期待!!
https://ithelp.ithome.com.tw/upload/images/20200924/20129807IV2LgndlY0.png


上一篇
[DAY 8] ROS Node的執行與測試
下一篇
[DAY 10]ROS Messages 的介紹與應用
系列文
ROS系統控制自走車搭配點雲雷達(隧道檢測裝置)30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言